#include<bits/stdc++.h>
#define TxtIO freopen("input.txt","r",stdin); freopen("output.txt","w",stdout);
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define oset tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>
const long long r=998244353;
long long po(long long a, long long b){
long long z=1;
long long y=a;
while(b){
if(b&1){
z*=y;
z%=r;
}
y*=y;
y%=r;
b/=2;
}
return z;
}
int main(){
//ios_base::sync_with_stdio(false);
//cin.tie(NULL);
int t;
cin>>t;
int yy=1000000;
long long fa[2*yy+2];
fa[0]=1;
for(int i=1;i<2*yy+2;i++){
fa[i]=(fa[i-1]*i)%r;
}
long long ffa[yy+1];
ffa[yy]=po(fa[yy],r-2);
for(int i=yy-1;i>=0;i--){
ffa[i]=(ffa[i+1]*(i+1))%r;
}
while(t--){
long long a,b,c,d;
cin>>a>>b>>c>>d;
if(a==0 && b==0 && c==0 && d==0){
cout<<1<<'\n';
}
else if(a==b){
if(a==0){
if((c==0 && d!=0) || (d==0 && c!=0)){
cout<<1<<"\n";
}
else{
cout<<0<<'\n';
}
}
else{
long long h=((fa[d+a-1]*fa[c+a-1])%r);
h=(h*ffa[d])%r;
h=(h*ffa[c])%r;
h=(h*ffa[a])%r;
h=(h*ffa[a-1])%r;
h=(h*(d+a+a+c))%r;
cout<<h<<'\n';
}
}
else if(a==b+1){
long long h=(fa[d+a-1]*fa[c+a-1])%r;
h=(h*ffa[d])%r;
h=(h*ffa[c])%r;
h=(h*ffa[a-1])%r;
h=(h*ffa[a-1])%r;
cout<<h<<'\n';
}
else if(a+1==b){
long long h=((fa[d+b-1]*fa[c+b-1])%r);
h=(h*ffa[d])%r;
h=(h*ffa[c])%r;
h=(h*ffa[b-1])%r;
h=(h*ffa[b-1])%r;
cout<<h<<'\n';
}
else{
cout<<'0'<<'\n';
}
}
return 0;
}
1605B - Reverse Sort | 1607C - Minimum Extraction |
1604B - XOR Specia-LIS-t | 1606B - Update Files |
1598B - Groups | 1602B - Divine Array |
1594B - Special Numbers | 1614A - Divan and a Store |
2085. Count Common Words With One Occurrence | 2089. Find Target Indices After Sorting Array |
2090. K Radius Subarray Averages | 2091. Removing Minimum and Maximum From Array |
6. Zigzag Conversion | 1612B - Special Permutation |
1481. Least Number of Unique Integers after K Removals | 1035. Uncrossed Lines |
328. Odd Even Linked List | 1219. Path with Maximum Gold |
1268. Search Suggestions System | 841. Keys and Rooms |
152. Maximum Product Subarray | 337. House Robber III |
869. Reordered Power of 2 | 1593C - Save More Mice |
1217. Minimum Cost to Move Chips to The Same Position | 347. Top K Frequent Elements |
1503. Last Moment Before All Ants Fall Out of a Plank | 430. Flatten a Multilevel Doubly Linked List |
1290. Convert Binary Number in a Linked List to Integer | 1525. Number of Good Ways to Split a String |